﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using MetroFramework.Forms;
using MetroFramework.Controls;
using System.Text.RegularExpressions;
using System.Net;
using System.IO;

namespace metaframeworkat_upres
{
    public partial class Login : MetroForm
    {
        private static string content;
        private CookieContainer _cookie = null;
        private static string server;
        private static string username;
        private static string password;
        private static Boolean startStop = false;
        public Login()
        {
            InitializeComponent();
        }

        private Boolean doLogin(String server, String username, String password, string html)
        {
            http http1 = new http();
            //bỏ khoảng trống trong source trang login

            String loginPageHTML = GetLoginPage();// okii.
            //lấy code login
            Match matchLoginCode = Regex.Match(loginPageHTML, "name=\"login\" value=\"(?<loginCode>\\d+)\"");
            //nếu lấy được code login (nghĩa là kết nối được với server)
            if (matchLoginCode.Value != null && matchLoginCode.Value != "")
            {
                //String postData = "name=" + username + "&password=" + password + "&s1=%C4%90%C4%83ng+nh%E1%BA%ADp&w=1366%3A768&login=1308739937";
                String postData = "name=" + username + "&password=" + password + "&s1=Login&w=1024%3A768&login=" + matchLoginCode.Value;
                string source = http1.POST(server + "/dorf1.php", postData, _cookie);

                _cookie = http1.Cookiejar;
                if (source.Contains("logout"))
                {
                    return true;
                }
                return false;
            }
            //nếu ko lấy được code (ko kết nối được server)
            else
            {
                return false;
            }
        } //login code Boolean. (true - false)..
        private Boolean firstLogin(String server, String username, String password)
        {
            //dorf1 dor1 = new dorf1();


            UTF8Encoding encoder = new UTF8Encoding();
            string s1 = "دخول";
            byte[] bytes = Encoding.UTF8.GetBytes(s1);
            string utf8ReturnString = encoder.GetString(bytes);
            http http1 = new http();
            String loginUrl = server;
            //lấy source trang login
            String loginPageHTML = GetLoginPage();
            //lấy code login
            string pattern = "name=\"login\" value=\"(?<loginCode>\\d+)\"";
            Match matchLoginCode = Regex.Match(loginPageHTML, pattern, RegexOptions.IgnoreCase);
            //nếu lấy được code login (nghĩa là kết nối được với server)
            if (matchLoginCode.Value != null && matchLoginCode.Value != "")
            {
                //String postData = "name=" + username + "&password=" + password + "&s1=%C4%90%C4%83ng+nh%E1%BA%ADp&w=1366%3A768&login=1308739937";
                String postData = "name=" + username + "&password=" + password + "&s1=%D8%AF%D8%AE%D9%88%D9%84&w=1366%3A768&login=" + matchLoginCode.Groups[1].Value + "&lowRes=0";
                string source = http1.POST(server + "/dorf1.php", postData, _cookie);


                //_cookie = http1.Cookiejar;
                if (source.Contains("logout"))
                {
                    //after login, get list villages name , and coordinates
                    //sau khi login thì dùng souce trả về để lấy thông tin các làng đang có và toạ độ mỗi làng luôn
                    MessageBox.Show("done!");

                    //log


                }
                return true;
            }
            //nếu ko lấy được code (ko kết nối được server)
            else
            {
                return false;
            }
        }

        public string GetLoginPage()
        {
            WebRequest request = WebRequest.Create(server);
            request.Method = "GET";
            WebResponse response = request.GetResponse();
            Stream stream = response.GetResponseStream();
            StreamReader reader = new StreamReader(stream);
            content = reader.ReadToEnd();
            reader.Close();
            response.Close();

            return content;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            
        }

        private void metroButton1_Click(object sender, EventArgs e)
        {
            server = metroTextBox3.Text;
            username = metroTextBox2.Text;
            password = metroTextBox1.Text;
            if (startStop == false)
            {

                label1.Text = "Login . . .";
                if (firstLogin(server, username, password))
                {
                    label1.Text = "Load Villages....";
                   


                }
                else
                {
                    MessageBox.Show("cannot login");

                }

            }
        }
    }
}
